3 → 1 bucket[3] 裡面是數字 1
2 → 2 bucket[2] 裡面是數字 2
bucket 的 index 就是出現次數:
bucket[1] 低頻
bucket[2]
bucket[3] 高頻
k = 要幾個答案;bucket index = 出現幾次;bucket 裡面 = 哪些數字出現這麼多次。
找 max 頻率,再填回本身數字;可能有多個數字同頻率,所以 bucket[freq] 才是 vector,不是單一 int。
3.102
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* node) {//最上node一層一層讀Tree
vector<vector<int>> answer;//每一層是一個vector
if (!node)//如果整Tree是空
return answer;//直接[]
queue<TreeNode*> nodesToVisit;//Queue存接下來要處理node
nodesToVisit.push(node);//先最上面node進Queue
while (!nodesToVisit.empty()) {//Queue有node繼續
int levelSize = nodesToVisit.size();//這層有幾個node
vector<int> level;//準備存目前這層數值
level.reserve(levelSize);//準備這層要的空間
for (int i = 0; i < levelSize; ++i) {//只處理目前這層
TreeNode* currentNode = nodesToVisit.front();//取Queue最前node
nodesToVisit.pop();//這node已開始處理,移出Queue
level.push_back(currentNode->val);//目前node的value放這層
if (currentNode->left)//如果有左邊node
nodesToVisit.push(currentNode->left);//放Queue給下層處理
if (currentNode->right)//如果有右邊node
nodesToVisit.push(currentNode->right);//同上
}
answer.push_back(level);//完成一整層,放進答案
}
return answer;//所有層
}
};